1、 应用层访问 I2C 适配器
	在应用层中可以通过 i2c_dev 设备访问 I2C 适配器，从而达到在应用层直接访问 I2C 设备的目的，在应用层可以按
如下步骤访问 I2C 设备：
		1）使用 open("/dev/i2c*", O_RDWR) 打开对应的 I2C 适配器
		2）通过 ioctl(fd, I2C_FUNCS, unsigned long *funcs) 获取 I2C 适配器所支持的功能，常用功能对应的宏有：
		I2C_FUNC_10BIT_ADDR 支持10位地址
		//下列宏对应的 smbus 协议支持
		I2C_FUNC_SMBUS_READ_BYTE 单字节随机读
		I2C_FUNC_SMBUS_WRITE_BYTE 单字节随机写
		I2C_FUNC_SMBUS_READ_WORD_DATA 双字节随机读
		I2C_FUNC_SMBUS_WRITE_WORD_DATA 双字节随机写
		I2C_FUNC_SMBUS_READ_BYTE_DATA 多字节水机读
		I2C_FUNC_SMBUS_WRITE_BYTE_DATA 多字节随机写
		I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 多个block随机写
		I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 单block随机写
		3）通过 ioctl(fd, I2C_SLAVE_FORCE, long address) 或 ioctl(fd, I2C_SLAVE,long address) 设置要访问的从
	机地址，其中 I2C_SLAVE_FORCE 表示强制设置，即内核中有对应设备的驱动也能执行成功
		4）通过 ioctl(fd, I2C_RDWR, struct i2c_rdwr_ioctl_data *msg) 或 ioctl(fd, I2C_SMBUS, struct i2c_smbu
	s_ioctl_data *args) 传输数据， struct i2c_rdwr_ioctl_data 和 struct i2c_smbus_ioctl_data 的数据结构如下：
		struct i2c_rdwr_ioctl_data {
			//msg地址
			struct i2c_msg *msgs;
			//msg个数
			int nmsgs;
		};
		struct i2c_msg {
			//从机地址
			__u16 addr;
			//传输标志，有如下标志：
			//    I2C_M_RD ：从从机读数据
			//    I2C_M_TEN ：地址长度为10位
			//    I2C_M_DMA_SAFE ：缓冲区支持 DMA
			//    I2C_M_RECV_LEN ：接收的第一个 byte 表示长度
			//    I2C_M_NO_RD_ACK ：不产生 ACK
			//    I2C_M_IGNORE_NAK ：忽略 NAK
			//    I2C_M_NOSTART ：不产生开始信号
			//    I2C_M_STOP ：产生停止信号
			_u16 flags;
			//消息长度
			__u16 len;
			//消息缓冲区
			__u8 *buf;
		};
		
		struct i2c_smbus_ioctl_data {
			//读写标志
			//    I2C_SMBUS_READ smbus读
			//    I2C_SMBUS_WRITE smbus写
			char read_write;
			//读数据前发送给从机的命令，一般表示芯片内部的寄存器地址
			__u8 command;
			//传输模式
			//    I2C_SMBUS_QUICK 只发送一位数据，通过R/W位实现
			//    I2C_SMBUS_BYTE 传输一个字节
			//    I2C_SMBUS_BYTE_DATA 发送命令后再传输1个字节
			//    I2C_SMBUS_WORD_DATA 发送命令后再传输2个字节
			//    I2C_SMBUS_PROC_CALL 先写2个字节，在读2字节
			//    I2C_SMBUS_BLOCK_DATA 发送命令后再传输1个block，block的第一个字节是后面数据的长度
			//    I2C_SMBUS_BLOCK_PROC_CALL 先写一个block，在读一个block，block的第一个字节是后面数据的长度
			//    I2C_SMBUS_I2C_BLOCK_DATA 发送命令后再传输1个block，block第一个字节便是有些数据
			int size;
			//消息缓存
			union i2c_smbus_data *data;
		};
		union i2c_smbus_data {
			//单字节读写使用
			__u8 byte;
			//双字节读写使用
			__u16 word;
			//block读写使用
			__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
												 /* and one more for PEC */
		};
		5）使用完成后通过 close(fd) 关闭对应的 I2C 适配器
